--[[ 编码: WMS-300-24.1 名称: 盘点计划同步 作者: KUN 日期: 2025-1-29 入口函数: SKU_Sync 来源项目: 国科项目 功能说明: 1. 接收来自上游系统的 XML 格式数据,并解析该数据, 创建SKU及SKU_UPC SIMPLIFIED CHINESE 0 KH32803017 CGKHTY 螺旋刀片式髓内钉 螺旋刀片式股骨近端髓内钉10×170 JGDⅥ φ10×170 1 1 2 3 1 1 0 A KH-创伤 常温 small 50 更改记录: V2.0 HAN 20250402 代码规范 --]] wms_base = require( "wms_base" ) xml = require( "oi_base_xml" ) local function create_sku_upc( strLuaDEID, storer, item_code, upc_code ) local nRet, strRetInfo if ( upc_code == '' or upc_code == nil ) then return 0 end local sku_upc = m3.AllocObject( strLuaDEID,"SKU_UPC" ) sku_upc.storer = storer sku_upc.item_code = item_code sku_upc.upc_code = upc_code nRet, sku_upc = m3.CreateDataObj(strLuaDEID, sku_upc) return nRet end local function create_gk_proline( strLuaDEID, pro_line_no ) local nRet, strRetInfo if ( upc_code == '' or upc_code == nil ) then return 0 end local pro_line = m3.AllocObject( strLuaDEID,"GK_PROLINE" ) pro_line.proline_no = pro_line_no pro_line.proline_name = pro_line_no nRet, pro_line = m3.CreateDataObj(strLuaDEID, pro_line) return nRet end function SKU_Sync(strLuaDEID) local nRet, strRetInfo, n, nErr local err_msg nErr = 1 -- step1 获取接口中的输入数据 local soap_xml nRet, soap_xml = mobox.getCurEditDataPacket( strLuaDEID ) if ( nRet ~=0 ) then lua.Stop( strLuaDEID, "无法获取数据包 datajson !"..input_data ) return end -- 解析XML local parsed_data nRet, parsed_data = xml.parse(soap_xml) if ( nRet ~= 0 ) then lua.Stop( strLuaDEID, "接口输入的XML格式非法!" ) return end local sku_set = parsed_data["soapenv:Envelope"]["soapenv:Body"].inCommodityReq.COMMODITY_Input.InputParameters.COMMODITY_TB local n, sku, id local update_sku_obj = {} for n = 1, #sku_set do err_msg = '' sku = m3.AllocObject( strLuaDEID,"SKU" ) sku.item_code = sku_set[n].skuId sku.storer = sku_set[n].storerId sku.short_name = sku_set[n].skuName sku.item_name = sku_set[n].skuDec sku.spec = sku_set[n].spec sku.udf01 = sku_set[n].packageCode sku.udf02 = sku_set[n].packageQty sku.unit = sku_set[n].goodsUnit sku.long = lua.Get_NumAttrValue( sku_set[n].length ) sku.middle = lua.Get_NumAttrValue( sku_set[n].width ) sku.short = lua.Get_NumAttrValue( sku_set[n].height ) sku.abc_type = sku_set[n].abcType sku.is_life_mgt = ( sku_set[n].isBatchMgr == "1" and 'Y' ) or 'N' sku.is_sn_mgt = ( sku_set[n].isSnMgr == "1" and 'Y' ) or 'N' sku.udf03 = sku_set[n].isSnStorageMgr sku.img_url = sku_set[n].imgUrl sku.cell_type = sku_set[n].cidtype sku.prod_line = sku_set[n].productLine sku.udf04 = sku_set[n].storageConditions sku.item_type = sku_set[n].skuType sku.loading_limit = lua.Get_NumAttrValue( sku_set[n].maxCount ) -- 判断SKU是否已经存在 strCondition = "S_ITEM_CODE = '"..sku.item_code.."' AND S_STORER = '"..sku.storer.."'" nRet, id, strRetInfo = mobox.getDataObjAttrByKeyAttr( strLuaDEID, "SKU", strCondition ) if ( nRet > 1 ) then err_msg = "GK-WMS 同步SKU信息失败: 在检查 skuId = '"..sku.item_code.."'是否存在时失败!"..strRetInfo goto continue end if ( nRet == 1 ) then -- SKU 不存在 nRet, sku = m3.CreateDataObj(strLuaDEID, sku) if (nRet ~= 0 ) then lua.Stop( strLuaDEID, "创建【SKU】失败!"..sku.." skuId = "..sku_set[n].skuId ) return end else -- SKU 已经存在更新属性 update_sku_obj = { { id = id, attrs = { { attr = "S_ITEM_NAME", value = sku.item_name }, { attr = "S_ITEM_SPEC", value = sku.spec }, { attr = "S_ITEM_TYPE", value = sku.item_type }, { attr = "S_UNIT", value = sku.unit }, { attr = "S_SHORT_NAME", value = sku.short_name }, { attr = "S_ABCTYPE", value = sku.abc_type }, { attr = "C_ISSNMGT", value = sku.is_sn_mgt }, { attr = "C_ISLIFEMGT", value = sku.is_life_mgt }, { attr = "S_IMG_URL", value = sku.mg_url }, { attr = "S_CELL_TYPE", value = sku.cell_type }, { attr = "S_PROD_LINE", value = sku.prod_line }, { attr = "N_LOADING_LIMIT", value = sku.loading_limit }, { attr = "F_LONG", value = sku.long }, { attr = "F_MIDDLE", value = sku.middle }, { attr = "F_SHORT", value = sku.short }, { attr = "S_UDF01", value = sku.udf01 }, { attr = "S_UDF02", value = sku.udf02 }, { attr = "S_UDF03", value = sku.udf03 }, { attr = "S_UDF04", value = sku.udf04 } } } } nRet, strRetInfo = mobox.updateDataObj( strLuaDEID, "SKU", table2str(update_sku_obj) ) if (nRet ~= 0 ) then lua.Stop( strLuaDEID, "更新【物料】属性失败!"..strRetInfo ) return end end -- 新增生产线 create_gk_proline( strLuaDEID, sku.prod_line ) -- 处理SKU_UPC create_sku_upc( strLuaDEID, sku.storer, sku.item_code, sku_set[n].sptm ) create_sku_upc( strLuaDEID, sku.storer, sku.item_code, sku_set[n].barcode1 ) create_sku_upc( strLuaDEID, sku.storer, sku.item_code, sku_set[n].barcode2 ) create_sku_upc( strLuaDEID, sku.storer, sku.item_code, sku_set[n].barcode3 ) create_sku_upc( strLuaDEID, sku.storer, sku.item_code, sku_set[n].barcode_pk ) ::continue:: -- 如果有错误信息加到系统的 Waring 对象 if ( err_msg ~= '') then wms_base.Warning( strLuaDEID, 1, 601, err_msg, "从GK-WMS系统同步SKU信息" ) nErr = nErr + 1 err[nErr] = err_msg end end if ( nErr > 0 ) then local err_info = { from = "GK-WMS SKU数据同步", err_msg = err } mobox.returnValue( strLuaDEID, 1, lua.table2str(err_info), 5 ) end end